'''
Created on 21/03/2012

@author: Gonzalez
'''
from google.appengine.api import users
from google.appengine.ext.db import DateProperty
from database.uTareas import Tareas
from Units.UserConf import UserConf
from google.appengine.ext import db
import uConst
import datetime


class UserFlow(object):
    
    def isLogged(self):
        return not self._usuarioAct is None
    
    def LogIn(self):
        self._entorno.redirect('/inicio')
        
    def LogOut(self):
        self._entorno.redirect(users.create_logout_url(uConst.LOGIN))
        
    def getUsuarioAct(self):
        return self._usuarioAct
        
    def getEmail(self):
        if self.isLogged():
            return self._usuarioAct.email()
        
    def crearTarea(self, aAsunto, aCategoria, aPrioridad, aNotas, aDateTime, aDuracion):
        aTarea = Tareas()
        aTarea.setUser(self._usuarioAct)
        aTarea.setAsunto(aAsunto)
        aTarea.setFechaCreacion(datetime.datetime.now())
        aTarea.setCategoria(aCategoria)
        aTarea.setPrioridad(aPrioridad)
        aTarea.setNotas(aNotas)
              
        if not (DateProperty().empty(aDateTime)): 
            aTarea.setVencimiento(aDateTime)
        
        try:
            aTarea.setTiempoEstimado(aDuracion)  #Validacion hecha con JavaScript.
        except:
            pass

        return aTarea

    def modificarTarea(self, task_key, aAsunto, aCategoria, aPrioridad, aNotas, aDateTime, aDuracion):
        
        aTarea = self.getTareaPorClave(task_key)
        aTarea.setAsunto(aAsunto)
        aTarea.setCategoria(aCategoria)
        aTarea.setPrioridad(aPrioridad)
        aTarea.setNotas(aNotas)
              
        if not (DateProperty().empty(aDateTime)): 
            aTarea.setVencimiento(aDateTime)
        
        try:
            aTarea.setTiempoEstimado(aDuracion)  #Validacion hecha con JavaScript.
        except:
            pass


    def getTareaPorClave(self, aKey):
        return db.get(aKey)
    
    def getTareasConVencimiento(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario=:User AND _Completada=:aComp AND _Vencimiento>0', User = self._usuarioAct, aComp = False)
        return var
       
    def getTasks(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario=:User AND _Completada=:aComp ORDER BY _Prioridad DESC', User = self._usuarioAct, aComp = False)
        return var
        
    def getTask_Buzon(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario!=:User AND _UsuariosCompartidos=:UserEmail AND _Completada=:aComp', User = self._usuarioAct, UserEmail = self.getEmail()  , aComp = False)
        return var

    def getTask_Trabajo(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario=:User AND _Categoria=:aCat AND _Completada=:aComp ORDER BY _Prioridad DESC', User = self._usuarioAct, aCat = "Trabajo", aComp = False)
        return var

    def getTask_Personal(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario=:User AND _Categoria=:aCat AND _Completada=:aComp ORDER BY _Prioridad DESC', User = self._usuarioAct, aCat = "Personal", aComp = False)
        return var

    def getTask_Estudio(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario=:User AND  _Categoria=:aCat AND _Completada=:aComp ORDER BY _Prioridad DESC', User = self._usuarioAct, aCat = "Estudio", aComp = False)
        return var

    def getTask_Enviadas(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario=:User AND _Compartida=:aCompartida AND _Completada=:aComp ORDER BY _Prioridad DESC', User = self._usuarioAct, aCompartida = True, aComp = False)
        return var

    def getTask_Completadas(self):
        var = db.GqlQuery('SELECT * FROM Tareas WHERE _Usuario=:User AND _Completada=:aComp ORDER BY _Prioridad DESC', User = self._usuarioAct, aComp = True)
        return var
    
    def getConf(self):
        var = db.GqlQuery('SELECT * FROM UserConf where _Usuario=:owner', owner=self._usuarioAct)
        if (var.count()==0): #Si es la primera ves que ingresa, se setea la config predeterminada
            conf = UserConf()
            conf.setUsuario(self._usuarioAct)
            conf.setTheme('index.css')
            aTarea = Tareas() #Tarea Inicial de Bienvenida
            aTarea.setUser(self._usuarioAct)
            aTarea.setAsunto("Bienvenido! Prueba el Administrador de Tareas!")
            aTarea.setFechaCreacion(datetime.datetime.now())
            aTarea.setCategoria("Personal")
            aTarea.setPrioridad("0")
            aTarea.setNotas("")
        else: #Sino se busca la configuracion del usuario
            conf = UserConf.gql('where _Usuario=:owner',owner=self._usuarioAct)[0]
        return conf
    
    def __init__(self, aEntorno):
        self._entorno = aEntorno 
        self._usuarioAct = users.get_current_user()
        
        
        
        
        
        
        
        
        


        